<?php
/**
 * @author 		faithsmine@gmail.com
 * @copyright 	        www
 * @version 		1.0
 * @name 			func.class.php
 * @todo 			Define the common function class
 * @final 			2009-12-10
 */
!defined("IN_YCTOOL") && exit();
/**
 * 通用函数处理方法
 *
 */
class func
{
    /**
     * 对数组内每一个元素进行adsslashes操作
     *
     * @param array $array
     */
    public static function adsslashesArray(&$array)
    {
	if($array)
	{
	    foreach ($array as $key => $value)
	    {
            if (!is_array($value))
            {
		$array[$key] = addslashes($value);
	    }
	    else
	    {
		self::adsslashesArray($array[$key]);
	    }
	    }
	}
	return $array;
    }

    /**
     * 对数组内每一个元素进行stripslashes操作
     *
     * @param array $array
     */
    public static function stripslashesArray(&$array)
    {
	if($array)
	{
		foreach ($array as $key => $value)
		{
		    if (!is_array($value))
		    {
			$array[$key] = stripslashes($value);
		    }
		    else
		    {
			self::stripslashesArray($array[$key]);
		    }
		}
	}
	return $array;
    }

    /**
     * 获取客户端IP地址
     *
     * @return string
     */
    public static function remoteAddr()
    {
	if ($_SERVER['HTTP_CLIENT_IP'])
	{
	    $onlineip = $_SERVER['HTTP_CLIENT_IP'];
	}
	else if ($_SERVER['HTTP_X_FORWARDED_FOR'])
	{
	    $onlineip = $_SERVER['HTTP_X_FORWARDED_FOR'];
	}
	else
	{
	    $onlineip = $_SERVER['REMOTE_ADDR'];
	}
	return $onlineip;
    }

    /**
     * 跳转到指定的网址
     *
     * @param string $URL
     */
    public static function obHeader($URL)
    {
	if (!headers_sent())
	{
	    header("Location: $URL");
	}
	else
	{
	    echo "<meta http-equiv='refresh' content='0;url=$URL'>";
	}
	exit;
    }
    /**
     * 跳转到指定的网址
     *
     * @param string $URL
     */
    function showMsg($msg, $path = '', $url = '', $time = '')
    {
        echo '<meta http-equiv="Content-Type" content="text/html; charset='.CHARSET.'" />'."\n";
        echo '<link href="'.$path.'javascript/showmsg/showmsg.css" rel="stylesheet" type="text/css" />'."\n";
        echo '<script type="text/javascript" src="'.$path.'javascript/showmsg/showmsg.js"></script>'."\n";
        echo "<script>showMsg('$msg', '$url', '$time');</script>";
        exit();
    }
    /**
     * alert 提示后，跳转到指定的网址
     *
     * @param string $URL
     */
    function alertMsg($msg, $url='')
    {
	echo '<meta http-equiv="Content-Type" content="text/html; charset='.CHARSET.'" />';
	echo '<style type="text/css">body{ background-color:#FFFFFF;}</style><body>';
	if($url)
	{
	    echo "<script type='text/javascript'>alert('".$msg."');document.location='".$url."';</script>";
	}
	else
	{
	    echo "<script type='text/javascript'>alert('".$msg."');history.back();</script>";
	}
	exit();
    }

    /**
     * 设置 cookie
     *
     * @param string $name, $value, $time
     * @return bool
     */
    public static function setCookieValue($name, $value, $time, $path = '/', $domain = "")
    {
	setcookie($name, $value, time()+$time, $path, $domain);
    }
     /**
     * 清楚 cookie
     *
     * @param string $name
     * @return bool
     */
    public static function clearCookieValue($name, $path = '/', $domain = "")
    {
	setcookie($name, "", 0, $path, $domain);
    }
    /**
     * pass密钥
     */
    public static function passkeyEncode($key)
    {
	return md5($key . PASSKEY);
    }

    /**
     * 判断是否是email
     *
     * @param string $email
     * @return bool
     */
    public static function isEmail($email)
    {
	if (!ereg("^[-a-zA-Z0-9_\.]+\@([0-9A-Za-z][0-9A-Za-z-]+\.)+[A-Za-z]{1,5}$", $email))
	{
            return false;
        }
        else
	{
          return true;
        }
    }
    /**
     * 函数名：CheckTelephone($C_telephone)
     * 作 用：判断是否为合法电话号码
     *
     * 参 数：$C_telephone（待检测的电话号码）
     * 返回值：布尔值
     * 备 注：无
     *
     **/
    function isTelephone($C_telephone)
    {
	if (!ereg("^[+]?[0-9]+([xX-][0-9]+)*$", $C_telephone))
	{
	    return false;
	}
	else
	{
	    return true;
	}
    }
    /**
     * 函数名：checkpost($c_post)
     * 作 用：判断是否为合法邮编（固定长度）
     *
     * 参 数：$C_post（待check的邮政编码）
     * 返回值：布尔值
     * 备 注：无
     *
     **/
    function isPostCode($strPostCode)
    {
	if (strlen($strPostCode) == 6)
	{
	    if (!ereg("^[+]?[_0-9]*$",$strPostCode))
	    {
		return false;
	    }
	    else
	    {
		return true;
	    }
	}
	else
	{
	    return false;
	}
    }

    /**
     * 判断是否是URL
     *
     * @param string $url
     * @return bool
     */
    public static function isUrl($url)
    {
	if (!ereg("^http://[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*$", $url))
	{
	    return false;
	}
	else
	{
	    return true;
	}
    }

    /**
     * 判断给定日期字符串是否是合法日期
     *
     * @param string $strDate	格式形如YYYY-mm-dd
     * @return bool
     */
    public static function isDate($strDate)
    {
	if (strlen($strDate) < 1)
	{
	    return false;
	}
	$iaMonthDays = array(31,28,31,30,31,30,31,31,30,31,30,31);
	$iaDate = explode("-", $strDate);

	if (count($iaDate) != 3)
	{
	    return false;
	}

	if (strlen($iaDate[1]) > 2 || strlen($iaDate[2]) > 2)
	{
	    return false;
	}

	$year   = intval($iaDate[0]);
	$month  = intval($iaDate[1]);
	$day	= intval($iaDate[2]);

	if (!$year || !$month || !$day)
	{
	    return false;
	}

	if ($year < 1900 || $year > 2100)
	{
	    return false;
	}

	if ((($year % 4 == 0) && ($year % 100 != 0)) || ($year % 400 == 0))
	{
	    $iaMonthDays[1] = 29;
	}

	if ($month < 1 || $month > 12)
	{
	    return false;
	}

	if ($day < 1 || $day > $iaMonthDays[$month - 1])
	{
	    return false;
	}
	return true;
    }

    /**
     * 判断给定的时间字符串转化为多少秒前
     * @param string $strTime	time()
     * @return string
     *
     */
    public static function trTime($strTime)
    {
	$isTime = time() - $strTime;
	if($isTime < 60)
	{
	    return $isTime .'秒前';
	}
	elseif($isTime < 3600)
	{
	    $isTime = $isTime/60;
	    return (int)($isTime) .'分钟前';
	}
	elseif($isTime < 86400)
	{
	    $isTime = $isTime/3600;
	    return (int)($isTime) .'小时前';
	}
	elseif($isTime < 2592000)
	{
	    $isTime = $isTime/86400;
	    return (int)($isTime) .'天前';
	}
	elseif($isTime > 2592000)
	{
	    $strTime = date("Y-m-d H:i:s", $strTime);
	    return self::trDate($strTime);
	}
    }

    /**
     * 判断给定的时间字符串是否是合法时间
     * @param string $strDate	time()
     * @return string
     *
     */
    public static function trDate($strDate)
    {
	$temp = explode(" ", $strDate);
	if (isset($temp[0]))
	{
	    $tempArray = explode("-", $temp[0]);
	    return $tempTime = $tempArray[0] . '年' . $tempArray[1] . '月' .  $tempArray[2] . '日 ' . $temp[1];
	}
	else
	{
	    return $strDate;
	}
    }

    /**
     * 判断给定的时间字符串是否是合法时间
     * @param string $strTimeString	格式形如hh:nn:ss
     * @return bool
     */
    public static function isTime($strTimeString)
    {
	if (strlen($strTimeString) < 1)
	{
	    return false;
	}

	$tempArray = explode(":", $strTimeString);

	!isset($tempArray[1]) && $tempArray[1] = 0;
	!isset($tempArray[2]) && $tempArray[2] = 0;

	$temph = intval($tempArray[0]);
	$tempm = intval($tempArray[1]);
	$temps = intval($tempArray[2]);

	if (!$temph || !$tempm || !$temps)
	{
	    return false;
	}

	if ($temph < 0 || $temph > 23)
	{
	    return false;
	}
	if ($tempm < 0 || $tempm > 59)
	{
	    return false;
	}
	if ($temps < 0 || $temps > 59)
	{
	    return false;
	}
	return true;
    }

    /**
     * 判断给定的时间字符串是否是合法时间,并返回 hh:nn 格式
     * @param string $strTimeString	格式形如hh:nn:ss
     * @return string hh:nn
     */
    public static function turnTime($strTimeString)
    {
	$tempArray = explode(":", $strTimeString);
	!isset($tempArray[1]) && $tempArray[1] = 0;
	!isset($tempArray[2]) && $tempArray[2] = 0;

	if($tempArray[0] !== '00')
	{
	    $temph = intval($tempArray[0]);
	    if ($temph <= 0 || $temph > 23)
	    {
		return false;
	    }
	}
	else
	{
	    $temph = $tempArray[0];
	    if(!$temph){return false;}
	}
	if($tempArray[1] !== '00')
	{
	    $tempm = intval($tempArray[1]);
	    if ($tempm <= 0 || $tempm > 59)
	    {
		return false;
            }
	}
	else
	{
	    $tempm = $tempArray[1];
	    if(!$tempm){return false;}
	}
	return $temph.":".$tempm;
    }

    /**
     * 判断给定的日期时间字符串是否合法
     * @param string $strDateTime	形如 YYYY-mm-dd hh:ii:ss
     * @return bool
     */
    public static function isDateTime($strDateTime)
    {
	if (strlen($strDateTime) < 5)
	{
	return false;
	}

	$tempArray = explode(" ", $strDateTime);
	$tempDate = $tempArray[0];
	if (isset($tempArray[1]))
	{
	    $tempTime = $tempArray[1];
	}
	else
	{
	    $tempTime = "00:00:00";
	}

	if (self::isDate($tempDate) && self::isTime($tempTime))
	{
	    return true;
	}
	else
	{
	    return false;
	}
    }

    /**
     * 日期间隔
     *
     * @param string $diffday 间隔天数
     * @return 2006-09-09
     */
    function diffDay($day, $diffday = 0)
    {
	if($day)
	{
	    $arrday = array();
	    $arrday = split("-", $day);
	    $endday = @mktime(00,00,00,$arrday[1],$arrday[2],$arrday[0]);
	    $diffday = $diffday * 86400;
	    $day = date("Y-m-d", $endday + $diffday);
	}
	return $day;
    }

    /**
     * 两时间间隔
     *
     * @param string $time 格式 00:00
     * @return 秒数
     */
    function diffTime($timeone, $timetwo = 0)
    {
	if($timeone)
	{
	    $arrtimeone = array();
	    $arrtimeone = split(":", $timeone);
	    $arrtimetwo = array();
	    $arrtimetwo = split(":", $timetwo);
	    $one = gmmktime($arrtimeone[0], $arrtimeone[1]);
	    $two = gmmktime($arrtimetwo[0], $arrtimetwo[1]);
	    $timeone = $two - $one;
	}
	return $timeone;
    }

    /**
     * 变换日期格式 eg:2006-9-9 => 2006-09-09
     *
     * @param string $string:2006-9-9
     * @return 2006-09-09
     */
    function trDay($trday)
    {
	$arrday = array();
	$arrday = split("-", $trday);
	if (strlen($arrday[1]) == 1) $arrday[1] = "0". $arrday[1];
	if (strlen($arrday[2]) == 1) $arrday[2] = "0". $arrday[2];
	$trday = implode("-", $arrday);
	return $trday;
    }

    /**
     * 将给定的由特定符号分隔开的字符串过滤掉空白字符
     * @param string $sep	        分隔字符串
     * @param string $strList	给定的字符串
     * @param string $strRet
     */
    public static function trimSep($sep, $strList)
    {
	$strArray = explode($sep, $strList);
	$strRet = "";
	if ($strArray)
	{
	    foreach ($strArray as $keyid => $item)
	    {
		$strArray[$keyid] = trim($item);
	    }
	    $strArray = array_unique($strArray);
	    $strRet = implode($sep, $strArray);
    	}
	return $strRet;
    }

    /**
     * 将图像转换为另给定的尺寸 同比例缩放
     * @param string $strFile	图像文件名
     * @param int $toW, $toH	要转换为的宽和高
     * @param string $toFile	另存为的文件名，如果为空，则覆盖原文件
     */
    function imageResize($srcFile, $toW, $toH, $toFile="")
    {
	if ($toFile == "")
	{
	    $toFile = $srcFile;
	}
	$info = "";
	$data = GetImageSize($srcFile, $info);
	switch ($data[2])
	{
		case 1:
			if (!function_exists("imagecreatefromgif"))
			{
				return "您的GD库不能使用GIF格式的图片，请使用JPEG或PNG格式！";
			}
			$im = ImageCreateFromGIF($srcFile);
			break;
		case 2:
			if (!function_exists("imagecreatefromjpeg"))
			{
				return "您的GD库不能使用JPEG格式的图片，请使用其它格式的图片！";
			}
			$im = ImageCreateFromJpeg($srcFile);
			break;
		case 3:
			$im = ImageCreateFromPNG($srcFile);
			break;
	}
	$srcW = ImageSX($im);
	$srcH = ImageSY($im);
	$toWH = $toW/$toH;//200/200
	$srcWH = $srcW/$srcH;//200/100

	if ($toWH <= $srcWH)
	{
		if($toW < $srcW)
		{
			$ftoW = $toW;
			$ftoH = $ftoW*($srcH/$srcW);
		}
		else
		{
			$ftoW = $srcW;
			$ftoH = $srcH;
		}
	}
	else
	{
		if($toH < $srcH)
		{
			$ftoH = $toH;
			$ftoW = $ftoH*($srcW/$srcH);
		}
		else
		{
			$ftoW = $srcW;
			$ftoH = $srcH;
		}
	}
	if (function_exists("imagecreatetruecolor"))
	{
		@$ni = ImageCreateTrueColor($ftoW, $ftoH);
		if ($ni)
			ImageCopyResampled($ni, $im, 0, 0, 0, 0, $ftoW, $ftoH, $srcW, $srcH);
		else
		{
			$ni=ImageCreate($ftoW,$ftoH);
			ImageCopyResized($ni,$im,0,0,0,0,$ftoW,$ftoH,$srcW,$srcH);
		}
	}
	else
	{
		$ni=ImageCreate($ftoW,$ftoH);
		ImageCopyResized($ni, $im, 0, 0, 0, 0, $ftoW, $ftoH, $srcW, $srcH);
	}
	if (function_exists('imagejpeg'))
		ImageJpeg($ni, $toFile, 80);
	else ImagePNG($ni, $toFile, 80);
	ImageDestroy($ni);
        ImageDestroy($im);
	return true;
    }
     /**
     * 将图像转换为另给定的尺寸 尺寸定死，不再同比例缩放。
     * @param string $strFile	图像文件名
     * @param int $toW, $toH	要转换为的宽和高
     * @param string $toFile	另存为的文件名，如果为空，则覆盖原文件
     */
    function imageIsResize($srcFile, $toW, $toH, $toFile="")
    {
	if ($toFile == "")
	{
		$toFile = $srcFile;
	}
	$info = "";
	$data = GetImageSize($srcFile, $info);
	switch ($data[2])
	{
		case 1:
			if (!function_exists("imagecreatefromgif"))
			{
				return "您的GD库不能使用GIF格式的图片，请使用JPEG或PNG格式！";
			}
			$im = ImageCreateFromGIF($srcFile);
			break;
		case 2:
			if (!function_exists("imagecreatefromjpeg"))
			{
				return "您的GD库不能使用JPEG格式的图片，请使用其它格式的图片！";
			}
			$im = ImageCreateFromJpeg($srcFile);
			break;
		case 3:
			$im = ImageCreateFromPNG($srcFile);
			break;
	}
	$srcW = ImageSX($im);
	$srcH = ImageSY($im);
	$ftoW = $toW;
	$ftoH = $toH;
	if (function_exists("imagecreatetruecolor"))
	{
		@$ni = ImageCreateTrueColor($ftoW, $ftoH);
		if ($ni)
			ImageCopyResampled($ni, $im, 0, 0, 0, 0, $ftoW, $ftoH, $srcW, $srcH);
		else
		{
			$ni=ImageCreate($ftoW,$ftoH);
			ImageCopyResized($ni,$im,0,0,0,0,$ftoW,$ftoH,$srcW,$srcH);
		}
	}
	else
	{
		$ni=ImageCreate($ftoW,$ftoH);
		ImageCopyResized($ni, $im, 0, 0, 0, 0, $ftoW, $ftoH, $srcW, $srcH);
	}
	if (function_exists('imagejpeg'))
		ImageJpeg($ni, $toFile, 80);
	else ImagePNG($ni, $toFile, 80);
	ImageDestroy($ni);
	ImageDestroy($im);
	return true;
    }

    /**
     * 图片上传错误验证
     * @param string $files	    另存为的文件名，如果为空，则覆盖原文件
     * @param int $size		    文件最大尺寸： K 为单位。
     * @param string $filesclass    文件类型
     */
    public static function errorUploadFIle($files, $size = 2000, $filesclass = 'image')
    {
	$sizeView = $size / 1000;
	if($sizeView < 1)
	{
	    $sizeView = $size . 'K';
	}
	else
	{
	    $sizeView = $sizeView . 'M';
	}
	$size = $size * 1000;
	$error = '';
	if (empty($files["name"]))
	{
	    $error = "文件不存在";
	}
	else if ($files["error"] == 1 || $files["error"] == 2)
	{
	    $error = "文件太大了";
	}
	else if ($files["error"] == 3 || $files["error"] == 4)
	{
	    $error = "文件上传错误，请重新上传";
	}
	else if ($files["size"] > $size)
	{
	    $error = "文件太大了，不能超过 " . $sizeView;
	}
	if ($filesclass = 'image')
	{
	    if (!in_array($files["type"], array("image/gif", "image/jpeg", "image/pjpeg", "image/png", "image/x-png", "image/bmp", "image/x-bmp")))
	    {
		$error = $files["type"] . "上传图像文件只支持GIF、JPG、PNG、BMP的格式";
	    }
	}
	if ($error)
	{
	    self::alertMsg($error);
	}
    }

    /**
     * 图片上传错误验证
     * @param string $strFile	图像文件名
     * @param int $toW, $toH	要转换为的宽和高
     * @param string $toFile	另存为的文件名，如果为空，则覆盖原文件
     */
    function errorUploadImage($files, $size = 2000000, $filesclass = 'image')
    {
	$sizeView = $size / (1000 * 1000) . 'M';
	$sizeView < 1 && $sizeView = $size / 1000 . 'K';
	$error = '';
	if (empty($files["name"]))
	{
	    $error = "您未选择任何文件";
	}
	else if ($files["error"] == 1 || $files["error"] == 2)
	{
	    $error = "文件太大了";
	}
	else if ($files["error"] == 3 || $files["error"] == 4)
	{
	    $error = "文件上传错误，请重新上传";
	}
	else if ($files["size"] > $size)
	{
	    $error = "文件太大了，不能超过".$sizeView;
	}
	if ($filesclass = 'image')
	{
	    if (!in_array($files["type"], array("image/gif", "image/jpeg", "image/pjpeg", "image/png", "image/x-png")))
	    {
		$error = $files["type"] . " 您上传的图像文件不属于GIF、JPG、PNG中的任何一种";
	    }
	}
	if ($error)
	{
	    self::alertMsg($error);
	}
    }

    //生成 并 获取路径的方法 操作目录文件，递归删除，目录大小的统计

    /**
     * 获取文件路径的方法
     * 注意 $userId 1 为数字 2 需要大约1000
     * @param int $userId ID数字
     * @return string 路径  例如ID=1233 返回路径 1/1233/$classfile/
     * @author supfire
     * @final 2008-08-05
     */
    function getFilePath($id, $classfile = '', $prefixpath = '')
    {
	$id = strval($id);
	$path = $prefixpath . substr($id, 0, (strlen($id)-3)) . '/' . $id . '/' . $classfile . '/';
	return $path;
    }

    /**
     *  返回用户的路径。如果不存在，则创建
     */
    function getFilePath2($id, $prefixpath, $classfile = '')
    {
        $id = strval($id);
        if (!file_exists($path))
        {
            @mkdir($prefixpath);
        }
        $path = $prefixpath . substr($id, 0, (strlen($id)-3));
        //echo "path=$path<br>";
        if(!file_exists($path)){
           @mkdir($path);
        }

        $path .= "/" . $id;
        //echo "path=$path<br>";
        if(!file_exists($path)){
            @mkdir($path);
        }

        if (strlen($classfile) > 0)
        {
            $path .= "/" . $classfile;
            if(!file_exists($path)){
                @mkdir($path);
            }
        }

        $path .= "/";

        return $path;
    }


    /**
     *  在指定的文件中,增加或修改指定的数据
     *      注意：key不能取-1
     *  @param variable    变量名.不带前缀美元符号
     *  @param arr         数据数组.现只支持2维数组，且均需要设置key
     *                     文件中保存为输入的数组结构
     *                     如果操作类型是追加,可以是一条记录;如果是覆盖需要是全部的数据
     *  @param filename    文件名.如果文件名中没有".",自动增加后缀filetype
     *  @param filetype    文件类型.现在只支持php
     *  @param type        操作类型.1,追加;2,覆盖
     *  @param prefixpath  路径前缀.带斜杠"\"
     *  @param minfilesize 文件的最小值.依此判断是否为第一个变量
     *  @return int 1:操作成功;0:操作失败
     *
     */
    function operateFile($variable, $arr, $filename, $filetype = 'php', $type = 1, $prefixpath = '', $minfilesize = 100)
    {
        $header_str = "<?php \n !defined(\"IN_YCTOOL\") && exit(); ";
        $footer_str = "?>";

        //变量前缀
        $pre_variablename = "\$";

        $_variable = trim($variable);
        $_filename = trim($filename);
        $_filetype = trim($filetype);
        $_prefixpath = trim($prefixpath);

        //判断变量名是否为空
        if (strlen($_variable) <= 0)
        {
            //echo "variable为空";
            return 0;
        }

        $variablename = $pre_variablename . $_variable;

        $array_num = count($arr);
        if ($array_num <= 0)
        {
            //echo "arr为空";
            //return 0;
        }

        //得到对应的路径(不包含文件名)
        $path1 = $_prefixpath;//Func::getFilePath2($userid, $prefixpath);

        $all_path_nofilename = $path1;

        //如果filename中没有包含".",则增加
        $all_filename;
        $index = strpos($_filename, ".");
        if ($index > 0)
        {
            $all_filename = $_filename;
        }
        else
        {
            if (strlen($_filetype) > 0)
            {
                $all_filename = $_filename . "." . $_filetype;
            }
        }

        //得到全部的相对路径（包含文件名）
        $all_path = $all_path_nofilename . $all_filename;
        //echo "all_path=" . $all_path;

        $content;

        //是否为数组的第一个.1为第一个;0为不是第一个
        //判断文件大小。如果文件不存在，自然是第一个；如果存在，则如果没有超过100byte,是第一个;反之,不是第一个
        $isfirst = 0;
        if (!file_exists($all_path))
        {
            $isfirst = 1;
        }
        else
        {
            $fsize = filesize($all_path);
            if ($fsize < $minfilesize)
            {
                $isfirst = 1;
            }
        }

        //写文件
        if ($type == 1)//追加
        {
            $handle = fopen($all_path, "a");
	}
        else//覆盖
        {
            $handle = fopen($all_path, "w");
            $isfirst = 1;
        }

        $i = 0;
	if($isfirst == 1)
	{
	    $content .= $header_str;
	}
	else
	{
	    $content .= "<?php ";
	}
        $content .= "\n";
	if($arr)
	{
	    foreach ($arr as $key => $rowdata)
	    {
		if ($i == 0 && $isfirst == 1)
		{
		    $content .= $variablename . "=array(" . $key . "=>array(";
		}
		else
		{
		    $content .= $variablename . "[" . $key . "]=array(";
		}

		//判断是否有值.1为有值,0表示没有
		$haveValue = 0;
		if($rowdata)
		{
		    foreach ($rowdata as $key2 => $value)
		    {
			$content .= "'$key2'=>'$value',";
			if ($haveValue == 0)
			{
			    $haveValue = 1;
			}
		    }
		}
		//
		$content .= "'-1'=>''";

		if ($i == 0 && $isfirst == 1)
		{
		    $content .="));";
		}
		else
		{
		    $content .=");";
		}

		$content .= "\n";

		$i++;
	    }
	}
        $content .= $footer_str;
        $content .= "\n";

        if (!fwrite($handle, $content))
        {
            //echo "写入失败";
            fclose($handler);
            return 0;
        }

        //关闭文件
        fclose($handle);
        return 1;
    }

    /**
     *  本函数实现了目录大小的统计功能
     *  @param $dir 目录路径名
     */
    function directory_traverse($dir){
        if (is_dir($dir)){
            if($dir_handle = opendir($dir)){

                while (false !== ($file_name = readdir($dir_handle)) ){

                    $file_type = filetype($dir.'/'.$file_name);

                    if($file_name=='.' or $file_name =='..'){
                        continue;
                    }
                    else{
                        if('dir' == $file_type){

                            $dir_size += self::directory_traverse($dir.'/'.$file_name);
                        }
                        elseif('file' == $file_type){

                            $file_size += filesize($dir.'/'.$file_name);

                        }
                    }
                }
            }

        } elseif (is_file($dir)){
            $size = filesize($dir);
        }

        return $file_size + $dir_size;
    }

    //递归删除: $dirName目录下所有的文件及目录
    ////deltree('dirname');
    function deltree( $dirName )
    {
	if ( $handle = opendir( "$dirName" ) )
       	{
	    while ( false !== ( $item = readdir( $handle ) ) )
	    {
		if ( $item != "." && $item != ".." )
	       	{
		    if ( is_dir( "$dirName/$item" ) )
		    {
		    self::delDirAndFile( "$dirName/$item" );
		    }
		    else
		    {
			return  unlink( "$dirName/$item" ) ;
		    }
		}
	    }
	    closedir( $handle );
	    return rmdir( $dirName ) ;
	}

    }


    //内容保存到文件
    function writeFiles($filename, $filecontent)
    {
	$fp = fopen($filename, "w");
	fseek($fp,0);
	fputs($fp,$filecontent);
	fclose($fp);
    }

    //获取文件中的内容
    function readFiles($filename)
    {
	$fp = fopen($filename, 'r');
	$filecontent = fread($fp, filesize($filename));
	fclose($fp);
	return $filecontent;
    }

    /**
     * 对一个一维数组进行缓存处理。
     *		存储文件：authcache.php
     *		文件内容为：$_SUPFIRE["$name"] 一个数组，
     *		直接 include就可以应用 $_SUPFIRE["$name"]数组。
     *
     * @param  str $filename 缓存后文件完整目录名（目录不存在就失败）
     *		例如 : DIR_CACHE.'sys' 即：D:\web\application\cache\sys
     * @param  str $arraylist 所要缓存的数组
     * @param  str $name  所要缓存后的主键与文件名称 例如：auth
     * @return
     *
     */
    function arrayOneCahce($arraylist, $filename, $name = 'auth')
    {
	$text = '<?php if(!defined("IN_YCTOOL")) exit("The requested URL could not be retrieved."); ' . "\n";
	if (is_array($arraylist) && $arraylist)
	{
	    func::adsslashesArray($arraylist);
	    $text .= '$_SUPFIRE["'.$name.'"] = array ('."\n";
	    foreach($arraylist as $key => $item)
	    {
		 $text .= "'$arr'  => '$item[$arr]',\n";
	    }
	    $text .= ");\n";
	}
	else
	{
	    $text .= $arraylist;
	}
	$text .= '?>';
	self::writeFiles($filename.'/'.$name.'cache.php', $text);
	return ;//提出来的数据
    }

    /**
     * 对一个两维数组进行缓存处理。
     *		存储文件：authcache.php
     *		文件内容为：$_SUPFIRE["$name"] 一个数组，
     *		读取时采用 ReadarrayCahce($filename, $name) 读取 结果为 $_SUPFIRE["$name"]数组。
     *
     * @param  str $filename 缓存后文件完整目录名（目录不存在就失败）
     *		例如 : DIR_CACHE.'sys' 即：D:\web\application\cache\sys
     * @param  str $arraylist 所要缓存的数组
     * @param  str $name  所要缓存后的主键与文件名称 例如：auth
     * @return
     *
     */
    function arrayTwoCahce($arraylist, $filename, $name = 'auth')
    {
	$text = '<?php if(!defined("IN_YCTOOL")) exit("The requested URL could not be retrieved."); ' . "\n";
	if (is_array($arraylist) && $arraylist)
	{
	    func::adsslashesArray($arraylist);
	    $arrstr = array_keys($arraylist[0]);
	    $text .= '$_SUPFIRE["'.$name.'"] = array ('."\n";
	    foreach($arraylist as $key => $item)
	    {
		$keyid = $arrstr[0];
		$text .= "$item[$keyid] => \n array (\n";

		foreach ($arrstr as $parrkey => $arr)
		{
		    $text .= "'$arr'  => '$item[$arr]',\n";
		}
		$text .= "),\n";
	    }
	    $text .= ");\n";
	}
	else
	{
	    $text .= $arraylist;
	}
	$text .= '?>';
	self::writeFiles($filename.'/'.$name.'cache.php', $text);
	return ;//提出来的数据
    }

    /**
     * 对缓存数组的读取。
     *		存储文件：authcache.php
     *		文件内容为：$_SUPFIRE["$name"] 一个数组，
     *		读取时采用 ReadarrayCahce($filename, $name) 读取 结果为 $_SUPFIRE["$name"]数组。
     *		func::readArrayCahce(DIR_CACHE.'sys', 'auth');
     * @param  str $filename 缓存后文件完整目录名（目录不存在就失败）
     *		例如 : DIR_CACHE.'sys' 即：D:\web\application\cache\sys
     * @param  str $name  所要缓存后的主键与文件名称 例如：auth
     * @return
     *
     */
    function readArrayCahce($filename, $name = 'auth')
    {
	require_once($filename.'/'.$name.'cache.php');

	if (is_array($_SUPFIRE["$name"]) && $arraylist)
	{
	    func::stripslashesArray($_SUPFIRE["$name"]);
	}

	return $_SUPFIRE["$name"];
    }

    /**
     * 对一个数组中的每一个个对象运用htmlspecialchars()函数，递归的。
     *
     * @param array $array
     * @return array
     */
    function htmlspecialcharsArray(&$array)
    {
	if (is_array($array))
	{
	    foreach ($array as $key => $value)
	    {
		if (!is_array($value))
		{
		    $array[$key] = htmlspecialchars($value);
		}
		else
		{
		    self::htmlspecialcharsArray($array[$key]);
		}
	    }
	}
	else
	{
	    if (is_string($array))
	    {
		$array=htmlspecialchars($array);
	    }
	    else
	    {
		$array = $array;
	    }
	}
	return $array;
    }

    /**
     * 正规表达式例子(自动转化www,ftp,mail开头的链接)
     *
     * @param array $array
     * @return array
     */
    function enableUrl($str)
    {
	// 自动转化www开头的链接
	$str = ereg_replace("(www.[a-zA-Z0-9@:%_.~#-\?&]+)", " <a href=\"linkHttp://\\1\" target=\"_blank\">\\1</a>", $str);
	//转化http://开头和ftp://开头的链接
	$str = ereg_replace("(((f|ht){1}tp://)[a-zA-Z0-9@:%_.~#-\?&]+)", "<a href=\"\\1\" target=\"_blank\">\\1</a>", $str);
	$str = str_replace('linkHttp://','http://',$str);
	// 转化邮件地址
	$str = ereg_replace("([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})","<a href=\"mailto:\\1\">\\1</a>", $str);
	return $str;
    }

    /**
     * 对一个数组中的每一个个对象运用 自动转化www,ftp,mail开头的链接，递归的。
     *
     * @param array $array
     * @return array
     */
    function enableUrlArray(&$array)
    {
	if (is_array($array))
	{
	    foreach ($array as $key => $value)
	    {
		if (!is_array($value))
		{
		    $array[$key] = self::enableUrl($value);
		}
		else
		{
		    self::enableUrlArray($array[$key]);
		}
	    }
	}
	else
	{
	    if (is_string($array))
	    {
	    $array=self::enableUrl($array);
	    }
	    else
	    {
		$array = $array;
	    }
	}
	return $array;
    }

    /**
     * 对一个数组中的一个对象特殊字符替代。
     *
     * @param array $sarr		    要替代的数组
     * @param array $key $strkey	    $key替代$strkey
     * @return array
    */
    function strReplaceArray($sarr, $key, $strkey)
    {
	if ($sarr)
	{
	    $result = array();
	    foreach ($sarr as $value)
	    {
		$value = str_replace($key, $strkey, $value);
		$result[] = $value;
	    }
	    return $result;
	}
	else
	{
	    return $sarr;
	}
    }

    /**
     * 对一个数组中的一个对象长度截取。
     *
     * @param array $sarr		要截取的数组
     * @param string $length 	截取的长度
     * @param array $key		截取的数组中此对象的键
     * @return array
    */
    function subArray($sarr, $length, $keyvalue = '')
    {
	if ($sarr)
	{
	    $result = array();
	    foreach ($sarr as $value)
	    {
		$value[$keyvalue] = substr($value[$keyvalue], 0, $length);
		$result[] = $value;
	    }
	    return $result;
	}
	else
	{
	    return false;
	}
    }

    /**
     * 对一个数组中的一个对象长度截取并strip_tags。
     *
     * @param array $sarr		要截取的数组
     * @param string $length 	截取的长度
     * @param array $key		截取的数组中此对象的键
     * @return array
     */
    function subTagsArray($sarr, $length, $keyvalue = '')
    {
	if ($sarr)
	{
	    $result = array();
	    foreach ($sarr as $value)
	    {
		$value[$keyvalue] = substr(strip_tags($value[$keyvalue]), 0, $length);
		$result[] = $value;
	    }
	    return $result;
	}
	else
	{
		return false;
	}
    }

    /**
     * Enter description here...
     * 截取[英文系]字符串指定长度
     *
     * @param unknown_type $content
     * @param unknown_type $length
     * @return unknown
     */
    function subStrs($content, $length)
    {
	if($length && strlen($content) > $length)
	{
	    $num = 0;
	    for($i = 0; $i < $length - 3; $i++)
	    {
		if(ord($content[$i]) > 127)
		{
		    $num++;
		}
	    }
	    $num%2==1 ? $content=substr($content,0,$length-4):$content=substr($content,0,$length-3);
	    $content.='..';
	}
	return $content;
    }

    /**
     * 截取[夹带中文系]字符串指定长度
     *
     * @param string $sourcestr 是要处理的字符串
     * @param int $cutlength 为截取的长度(即字数)
     * @param int $havedot:截取后是否显示'...'
     * @return 截取后的字符串
     */
    function cutStr($sourcestr,$cutlength,$havedot=0)
    {
	$returnstr='';
	$i=0;
	$n=0;
	$str_length=strlen($sourcestr);//字符串的字节数
	while (($n<$cutlength) and ($i<=$str_length))
	{
	   $temp_str=substr($sourcestr,$i,1);
	    $ascnum=Ord($temp_str);//得到字符串中第$i位字符的ascii码
	    if ($ascnum>=224)    //如果ASCII位高与224，
	    {
		$returnstr=$returnstr.substr($sourcestr,$i,3); //根据UTF-8编码规范，将3个连续的字符计为单个字符
		$i=$i+3;            //实际Byte计为3
		$n++;            //字串长度计1
	    }
	    elseif ($ascnum>=192) //如果ASCII位高与192，
	    {
		$returnstr=$returnstr.substr($sourcestr,$i,2); //根据UTF-8编码规范，将2个连续的字符计为单个字符
		$i=$i+2;            //实际Byte计为2
		$n++;            //字串长度计1
	    }
	    elseif ($ascnum>=65 && $ascnum<=90) //如果是大写字母，
	    {
		$returnstr=$returnstr.substr($sourcestr,$i,1);
		$i=$i+1;            //实际的Byte数仍计1个
		$n++;            //但考虑整体美观，大写字母计成一个高位字符
	    }
	    else                //其他情况下，包括小写字母和半角标点符号，
	    {
		$returnstr=$returnstr.substr($sourcestr,$i,1);
		$i=$i+1;            //实际的Byte数计1个
		$n=$n+0.5;        //小写字母和半角标点等与半个高位字符宽...
	    }
	}
	if ($str_length > $cutlength)
	{
	    //省略号
	    if($havedot)
	    {
		$returnstr = $returnstr . "...";//超过长度时在尾处加上省略号
	    }
	    else
	    {
		return $returnstr;
	    }
	}
    return $returnstr;
    }

    /**
     * 对一个数组中的一个对象长度截取（中文）< II >。
     *
     * @param array $sarr		要截取的数组
     * @param string $length 	截取的长度
     * @param array $key		截取的数组中此对象的键
     * @return array
     */
    function cutStrArray($sarr, $length, $keyvalue = '', $havedot=0)
    {
	if ($sarr)
	{
	    $result = array();
	    foreach ($sarr as $value)
	    {
		$value[$keyvalue] = self::cutStr($value[$keyvalue], $length, $havedot);
		$result[] = $value;
	    }
	    return $result;
	}
	else
	{
	    return false;
	}
    }

    /**
     * 和数据库相关时，过滤特殊字符 ' "
     *
     * @param array $str
     * @return string
     */
    function replaceQuotes($str)
    {
	if ($str)
	{
	    $str = str_replace('\'', "\"", $str);
	    $str = str_replace('\"', "`", $str);
	    return $str;
	}
	else
	{
	    return false;
	}
    }

    /**
     * 对字符串的特殊值进行替换
     *
     * @param unknown_type $msg
     * @return unknown
     */
    function trChar($msg)
    {
	$msg = stripslashes($msg);
	$msg = str_replace('\\','＼',$msg);
	$msg = str_replace('&','&amp;',$msg);
	$msg = str_replace('"','&quot;',$msg);
	$msg = str_replace("'",'&#39;',$msg);
	$msg = str_replace("<","&lt;",$msg);
	$msg = str_replace(">","&gt;",$msg);
	$msg = str_replace("\r","",$msg);
	return $msg;
    }

    /**
     * 类模板
     *
     * @param  html
     * @return unknown

     function template($template)
    {

	if (file_exists($template))
	{
	    require_once($template);
	    return true;
	}
	else
	{
	    return false;
	}
    }
    */
    /**
     * 生成分页字符串。输入列表总数，当前页数，每页显示数，网址URL，它将来自动生成分页列表字符串。
     *
     * @param int $count		记录总数
     * @param int $page			页码，从1开始
     * @param int $per			每页显示记录数
     * @param string $url		网址，需要在这个网址上附加page=4这样的请求
     * @return string		返回分页字符串
     */
    public static function pageStr($count, $page, $per, $url)
    {
	$pre = 4;
	$next = 4;

	$sum = ceil($count/$per);
	($page > $sum && $page != 1) && self::ObHeader($url ."&page=$sum");//supfire
	//$page > $sum && $page = $sum;
	(!is_numeric($page) || $page < 1) && $page = 1;
	if ($sum < 1)
	{
	    return ;
	}
	else
	{

	    $ret = "<style tape=\"text/css\">
 .quotes A {
	BORDER-RIGHT: #ddd 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #ddd 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; BORDER-LEFT: #ddd 1px solid; COLOR: #aaa; MARGIN-RIGHT: 2px; PADDING-TOP: 2px; BORDER-BOTTOM: #ddd 1px solid; TEXT-DECORATION: none
}
 .quotes A:hover {
	BORDER-RIGHT: #a0a0a0 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #a0a0a0 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; BORDER-LEFT: #a0a0a0 1px solid; MARGIN-RIGHT: 2px; PADDING-TOP: 2px; BORDER-BOTTOM: #a0a0a0 1px solid
}
 .quotes A:active {
	BORDER-RIGHT: #a0a0a0 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #a0a0a0 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; BORDER-LEFT: #a0a0a0 1px solid; MARGIN-RIGHT: 2px; PADDING-TOP: 2px; BORDER-BOTTOM: #a0a0a0 1px solid
}
 .quotes SPAN.current {
	BORDER-RIGHT: #e0e0e0 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #e0e0e0 1px solid; PADDING-LEFT: 5px; FONT-WEIGHT: bold; PADDING-BOTTOM: 2px; BORDER-LEFT: #e0e0e0 1px solid; COLOR: #aaa; MARGIN-RIGHT: 2px; PADDING-TOP: 2px; BORDER-BOTTOM: #e0e0e0 1px solid; BACKGROUND-COLOR: #f0f0f0
}
 .quotes SPAN.disabled {
	BORDER-RIGHT: #f3f3f3 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #f3f3f3 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; BORDER-LEFT: #f3f3f3 1px solid; COLOR: #ccc; MARGIN-RIGHT: 2px; PADDING-TOP: 2px; BORDER-BOTTOM: #f3f3f3 1px solid
}
</style>
    ";
	    $prepage = $page-1 ;
	    if($page != 1)
	    {
		$ret .= "<a href=\"" . $url . "&page=$prepage\">";
		$ret .= "&lt;";
		$ret .= "</a>";
	    }
	    else
	    {
		$ret .= "<span class=\"disabled\">";
		$ret .= "&lt;";
		$ret .= "</span>";
	    }

	    $pagestart0 = $page - $pre;
	    if($pagestart0 > 1 )
	    {
		$sum  > $pre && $ret .= "<a href='$url". "&page=1" ."'>1</a>";
	    }

	    $pagestart1 = $page - $pre - 1;
	    if($pagestart1 > 1 )
	    {
		$sum - 1 > $pre && $ret .= "<a href='$url". "&page=2" ."'>2</a>";
	    }

	    $pagestart2 = $page - $pre - 2;
	    if($pagestart2 > 1)
	    {
		$ret .= " ...";
	    }

	    $flag = 0;
	    for ($i = $page - $pre; $i <= min($sum, $page + $next); $i++)
	    {
		if ($i < 1)
		{
		    continue;
		}
		$ret .= $i == $page ? "<span class=\"current\">$page</span>" : "<a href='$url"."&page=$i"."'>$i</a>";
	    }

	    $pageend2 = $page + $next + 2;
	    if($pageend2 < $sum)
	    {
		$ret .= " ...";
	    }
	    $pageend0 = $page + $next;
	    $pageend1 = $page + $next + 1;
	    if($pageend1 < $sum )
	    {
		$sum1 = $sum-1;
		$sum - 1 > $pre && $ret .= "<a href='$url". "&page=$sum1" ."'>$sum1</a>";
	    }
	    if($pageend0 < $sum )
	    {
		$sum  > $pre && $ret .= "<a href='$url". "&page=$sum" ."'>$sum</a>";
	    }

	    $nextpage = $page+1 ;

	    if($page != $sum)
	    {
		$ret .= "<a href=\"" . $url . "&page=$nextpage\">";
		$ret .= "&gt;";
		$ret .= "</a>";
	    }
	    else
	    {
		$ret .= "<span class=\"disabled\">";
		$ret .= "&gt;";
		$ret .= "</span>";
	    }
	     return $ret;
	    }
    }
}
?>
